package com.manage.modules.utils;

import cn.hutool.core.util.StrUtil;
import com.manage.common.config.RuoYiConfig;
import com.manage.common.constant.Constants;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * 上传util
 *
 * @author xu
 * 2021/8/18 15:24
 */
public class UploadUtil {

    public static String upload(MultipartFile multipartFile, String parent, String fileName) throws IOException {
        // 判断文件是否为空
        if (multipartFile.isEmpty()) {
            return "";
        }
        // 获取上传路径 格式为 ./manage/upload/fault/20210818/logo.png
        String filePath = UploadConfig.getParentPath(parent) + fileName;
        //新建文件 注意是路径+文件名
        File targetFile = new File(filePath);
        //判断文件父目录是否存在
        if (!targetFile.getParentFile().exists()) {
            //不存在就创建一个
            targetFile.getParentFile().mkdirs();
        }
        //获取文件的输入流
        InputStream inputStream = multipartFile.getInputStream();
        //获取文件的输出流
        OutputStream outputStream = new FileOutputStream(targetFile);
        //最后使用资源访问器FileCopyUtils的copy方法拷贝文件
        FileCopyUtils.copy(inputStream, outputStream);
        // 关闭流
        close(inputStream, outputStream);
        return filePath;
    }

    /**
     * 删除相对路径下的文件
     *
     * @param filePath
     */
    public static void delete(String filePath) {
        if (StrUtil.isBlank(filePath)) {
            return;
        }
        File file = new File(RuoYiConfig.getProfile() + filePath);
        if (file.isFile() && file.exists()) {
            file.delete();
        }
    }


    /**
     * 根据本地文件绝对路径获取web相对路径
     *
     * @param localAbsoluteUrl 本地绝对路径
     * @return
     */
    public static String getWebRelativeUrl(String localAbsoluteUrl) {
        // web相对路径
        String webRelativeUrl = "";
        // 为空直接返回
        if (StrUtil.isBlank(localAbsoluteUrl)) {
            return webRelativeUrl;
        }
        // 项目跟路径
        String profile = RuoYiConfig.getProfile();
        // 获取项目根路径的长度
        int length = profile.length();
        webRelativeUrl = localAbsoluteUrl.substring(length);
        return Constants.RESOURCE_PREFIX + webRelativeUrl;
    }


    /**
     * 去除路径
     *
     * @param url
     * @param deleteUrl
     * @return
     */
    public static String getUrlByDelete(String url, String deleteUrl) {
        int length = deleteUrl.length();
        return url.substring(length);
    }

    public static void main(String[] args) {
        String path = UploadConfig.getFaultPath() + "logo.png";
        System.out.println(getWebRelativeUrl(path));
    }

    private static void close(InputStream inputStream, OutputStream outputStream) {
        //无论成功与否，都有关闭输入输出流
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
